package com.bdsoft.actions.OperationLogManage.comtroller;

import com.bdsoft.actions.AcUrls;
import com.bdsoft.actions.OperationLogManage.Service.OperationLogService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.Date;
import java.util.List;

@RestController
@RequestMapping(AcUrls.OperationLogManage.operationLogManageUrl)
@Tag(name = "操作日志管理")
@RequiredArgsConstructor
public class OperationLogController {
    @Autowired

    private OperationLogService operationLogService;

    /**
     * 获取操作日志列表接口
     * 该接口用于获取操作日志的列表，支持分页查询，并可根据操作名称、用户ID和时间范围进行筛选。
     *
     * @param pageNum 页码，默认为1
     * @param pageSize 每页记录数，默认为10
     * @param operation 操作名称，可选参数，用于筛选特定操作
     * @param userId 用户ID，可选参数，用于筛选特定用户的操作日志
     * @param startTime 开始时间，可选参数，格式为"yyyy-MM-dd"，用于筛选起始时间之后的操作日志
     * @param endTime 结束时间，可选参数，格式为"yyyy-MM-dd"，用于筛选结束时间之前的操作日志
     * @return 返回包含操作日志列表的ResponseEntity对象
     */
    @GetMapping(AcUrls.OperationLogManage.getOperationLogList)
    @Operation(summary = "获取操作日志列表")
    public ResponseEntity<?> getOperationLogList(
            @RequestParam(defaultValue = "1") int pageNum,
            @RequestParam(defaultValue = "10") int pageSize,
            @RequestParam(required = false) String operation,
            @RequestParam(required = false) String userId,
            @RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd") Date startTime,
            @RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd") Date endTime) {

        // 调用operationLogService的getOperationLogList方法，获取操作日志列表
        return ResponseEntity.ok(operationLogService.getOperationLogList(
                pageNum, pageSize, operation, userId, startTime, endTime));
    }


    /**
     * 删除操作日志接口
     * 该接口用于删除指定ID的操作日志
     *
     * @param logId 要删除的操作日志ID
     * @return 返回操作结果，封装在ResponseEntity中
     */
    @PostMapping(AcUrls.OperationLogManage.deleteOperationLog)
    @Operation(summary = "删除操作日志")
    public ResponseEntity<?> deleteOperationLog(@RequestParam String logId) {
        // 调用 operationLogService 的 deleteOperationLog 方法，传入 logId 作为参数
        // 该方法将删除指定 ID 的操作日志并返回操作结果
        return ResponseEntity.ok(operationLogService.deleteOperationLog(logId));
    }


    /**
     * 批量删除操作日志接口
     * 该接口用于批量删除操作日志，通过传入日志ID列表进行删除操作。
     *
     * @param logIds 要删除的操作日志ID列表
     * @return 返回操作结果的ResponseEntity对象
     */
    @PostMapping(AcUrls.OperationLogManage.batchDeleteOperationLog)
    @Operation(summary = "批量删除操作日志")
    public ResponseEntity<?> batchDeleteOperationLog(@RequestBody List<String> logIds) {
        // 调用operationLogService的batchDeleteOperationLog方法，传入logIds进行批量删除操作
        // 并返回操作结果的ResponseEntity对象
        return ResponseEntity.ok(operationLogService.batchDeleteOperationLog(logIds));
    }

}